package com.cyzy.controller;


import com.cyzy.dto.Result;
import com.cyzy.pojo.FileInfo;
import com.cyzy.service.FileService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.net.URI;

@RestController
@RequestMapping("/files")

public class FileController {
    @Autowired
    private  FileService fileService;

    /**
     * 文件上传接口
     * POST /api/files/upload
     * @param file 前端传入的 MultipartFile
     * @return 保存后的 FileInfo 对象（包含 URL）
     */
    @PostMapping("/upload")
    public Result upload(@RequestParam("file") MultipartFile file,
                         @RequestParam(name = "userId",defaultValue = "0") int userId,
                         @RequestParam(name = "stuId",defaultValue = "0") int stuId) {


        FileInfo info = fileService.uploadFile(file, userId, stuId);

        // 返回 201 Created 并在 Location 头中指向获取详情的 URI
        return Result.ok().data("file", info);
    }

    /**
     * 查询文件元数据
     * GET /api/files/{id}
     * @param id 文件 ID
     * @return 对应的 FileInfo
     */
    @GetMapping("/{id}")
    public ResponseEntity<FileInfo> getInfo(@PathVariable Long id) {
        FileInfo info = fileService.getFileInfo(id);
        if (info == null) {
            return ResponseEntity.notFound().build();
        }
        return ResponseEntity.ok(info);
    }

    /**
     * 预览或下载文件（可选）
     * GET /api/files/{id}/stream
     * 本接口会重定向到 MinIO 的直链地址，也可以用作下载。
     */
    @GetMapping("/{id}/stream")
    public ResponseEntity<Void> stream(@PathVariable Long id) {
        FileInfo info = fileService.getFileInfo(id);
        if (info == null) {
            return ResponseEntity.notFound().build();
        }
        // 重定向到 MinIO 的预签名 URL
        return ResponseEntity
                .status(302)
                .location(URI.create(info.getUrl()))
                .build();
    }




//    @GetMapping("/{id}/proxy")
//    public ResponseEntity<byte[]> proxy(@PathVariable Long id) {
//        FileInfo info = fileService.getFileInfo(id);
//        if (info == null) {
//            return ResponseEntity.notFound().build();
//        }
//        // 这里假设 FileServiceImpl 提供了一个下载字节数组的方法
//        byte[] data = fileService.downloadFileBytes(id);
//        return ResponseEntity.ok()
//                .header(HttpHeaders.CONTENT_DISPOSITION,
//                        "inline; filename=\"" + info.getFileName() + "\"")
//                .contentLength(data.length)
//                .contentType(MediaType.parseMediaType(info.getContentType()))
//                .body(data);
//    }
}
